﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace Pink.Scheduler.Shared
{
	/// <summary>
	/// Класс, содержащий параметры логгирования для выполнения задачи.
	/// Нужен чтобы шедулер и его экзекьюторы имели общее понимание того, 
	/// как и куда писать логи.
	/// </summary>
	[Serializable]
	public class LoggingParameters
	{
		/// <summary>
		/// Шаблон вывода
		/// </summary>
		private string pattern;
		/// <summary>
		/// Папка, куда писать логи
		/// </summary>
		private string logsDirectory;
		/// <summary>
		/// Конструктор
		/// </summary>
		/// <param name="pattern">Шаблон вывода логов</param>
		/// <param name="logsDirectory">Путь, в который складываются логи</param>
		public LoggingParameters(string logsDirectory, string pattern)
		{
			this.logsDirectory = logsDirectory;
			this.pattern = pattern;
		}
		/// <summary>
		/// Дать контекст логгирования для выполняемой задачи
		/// </summary>
		/// <param name="taskID">Идентификатор задачи</param>
		/// <param name="executionID">Идентификатор запуска </param>
		/// <returns></returns>
		public IDisposable ProvideLoggingContext(string taskID, int executionID)
		{
			string logToFile = GetFileName(taskID, executionID);
			return new FileLoggingContext(logToFile, pattern);
		}

		/// <summary>
		/// Получить имя файла с логом задачи
		/// </summary>
		/// <param name="taskID">Идентификатор задачи</param>
		/// <param name="timeStamp">Время выполнения</param>
		/// <returns></returns>
		public string GetFileName(string taskID, int executionID)
		{
			string fileName = taskID + ".txt";
			string path = Path.Combine(logsDirectory, fileName);
			return path;
		}
	}
}
